package com.example.psychologicalappointmentsystem.tools;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.example.psychologicalappointmentsystem.Entity.User;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class JWTUtils {

    private static final String secretKey = "123"; // 用于签名的密钥
    private static final long expirationTime = 1000 * 60 * 60 * 24; // Token的过期时间（1天）

    // 生成Token
    public String generateToken(User user) {
        return JWT.create()
                .withSubject(user.getUsername()) // 设置用户名为Token的主题
                .withClaim("role", user.getRole().toString()) // 添加角色信息
                .withIssuedAt(new Date()) // 设置签发时间
                .withExpiresAt(new Date(System.currentTimeMillis() + expirationTime)) // 设置过期时间
                .sign(Algorithm.HMAC256(secretKey)); // 使用HMAC256加密算法签名
    }

    // 从Token中获取用户名
    public String getUsernameFromToken(String token) {
        return JWT.require(Algorithm.HMAC256(secretKey)) // 使用HMAC256算法
                .build()
                .verify(token)
                .getSubject(); // 获取用户名
    }

    // 验证Token是否有效
    public boolean validateToken(String token) {
        try {
            JWT.require(Algorithm.HMAC256(secretKey)) // 使用HMAC256算法
                    .build()
                    .verify(token); // 如果解析成功，返回true
            return true;
        } catch (JWTVerificationException e) {
            // 验证失败时记录异常
            System.out.println("JWT validation failed: " + e.getMessage());
            return false; // Token无效
        }
    }
}
